package com.liu.algorithm03;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
public class StringIsUnique {
    // 1. 确定字符串是否包含唯一字符
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.next().toLowerCase();
        // toCharArray：将字符串转换为新字符数组。
        /*char[] newArr = str.toCharArray();
        boolean flag = true;
        for (int i = 0; i < newArr.length; i++) {
            for (int j = i + 1; j < newArr.length; j++) {
                if (newArr[i] == newArr[j]){
                    flag = false;
                }
            }
        }
        if (flag){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }*/
        boolean flag = isUnique02(str);
        if (flag){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }
        System.out.println("-----------------------------------");
        boolean flag1 = isUnique03(str);
        if (flag1){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }
        System.out.println("-----------------------------------");
        boolean flag2 = isUnique04(str);
        if (flag2){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }
        System.out.println("-----------------------------------");
        boolean flag3 = isUnique05(str);
        if (flag3){
            System.out.println("YES");
        }else {
            System.out.println("NO");
        }

    }
    // 方法2：排序 + 遍历
    public static boolean isUnique02(String str){
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        for (int i = 1; i < chars.length; i++) {
            if (chars[i] == chars[i - 1]){
                return false;
            }
        }
        return true;
    }
    // 方法3：数组
    public static boolean isUnique03(String str){
        int[] nums = new int[26];
        for (int i = 0; i < str.length(); i++) {
            nums[str.charAt(i) - 'a']++;
        }
        for (int num : nums) {
            if (num > 1){
                return false;
            }
        }
        return true;
    }
    // 方法四：hashSet
    public static boolean isUnique04(String str){
        HashSet<Character> hashSet = new HashSet<>();
        for (int i = 0; i < str.length(); i++) {
            //  方法用于将指定的元素添加到此集合中（如果它尚不存在）。
            //  如果此集合已包含该元素，则调用保持该集合不变并返回 false。
            if (!hashSet.add(str.charAt(i))){ // 添加不成功，即重复，则返回false
                return false;
            }
        }
        return true;
    }
    public static boolean isUnique05(String str){
        for (char ch : str.toCharArray()){
            // indexOf:该字符在该对象所代表的字符序列中首次出现时的索引，如果没有出现该字符，则返回-1。
            // lastIndexOf:返回字符串中最后出现的指定字符的索引
            System.out.println(str.indexOf(ch));
            System.out.println(str.lastIndexOf(ch));
            if (str.indexOf(ch) != str.lastIndexOf(ch)){
                return false;
            }}
        return true;
    }
}
